package bridge.source;

/**
 * 桥接模式：
 * 将抽象部分与它的实现部分分离，使它们可以独立的变化
 * 核心意图是将实现独立出来，让他们各自变化。
 *
 * 实现部分可能有多角度分类，每一种分类都有可能变化，那么就把这种角度分离出来
 * 使它们独立变化，减少耦合
 *
 * 同时需要注意一个原则：
 * 合成/聚合原则：
 * 合成(Composition)和聚合(Aggregation)
 * 聚合表示一种弱的拥有关系，体现A对象可以包含B对象，但B对象不是A对象的一部分
 * 例如手机品牌与软件，合成则是强拥有关系，体现了严格的部分与整体的关系
 *
 * 滥用继承有时会带来很多问题。对象的继承关系在编译时就定义好，
 * 所以无法在运行时改变从父类继承的实现。
 * 子类与父类的强耦合导致父类中任何变化都会导致子类发生改变
 * 子类的复用性也会因此而被限制
 *
 * @author cheng:
 * @date 2019/4/20 15:45
 */
public interface Abstraction {

    void operation();

    void setImplementor(Implementor implementor);
}
